iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0

過了 Research 和 Serving 環節,接著進入 Monitoring 環節,我認為如果一個資料科學團隊要開始搭建 MLOPs 系統,最先要開始的絕對是 Monitoring,而這裡的 Monitoring 定義為: 主動發現錯誤,並通知相關人員進行修復,通知的部分不會是我們著墨的地方,可以透過公司內部的通訊軟體洛是 PagerDuty 這類的服務來做到,而在這篇開始我們先來探討錯誤的類別

錯誤類別

從粗暴到抽象,或說從容易發現到不容易發現我們可以歸類為以下幾層的錯誤類別

  • Exception Error: 當機器資源不足導致 OOM 或是程式出錯都會導致,通常這類錯誤不應概是被 error handling 起來,這樣很難回頭檢測問題,或是你的 Error Handling 應該發出訊息到你的 Monitroing System
  • Dependency Error:
    • 外部錯誤: 我把當 Model Inference latency 過高導致 Timeout 的情境歸類在這邊,對於 Model Inference 來說,Model Endpoint 本身並沒有遇到任何的問題,然後對於 Invoke 方卻出現錯誤
    • 內部錯誤: 如果模型內部去調用其他服務,像是 Feature Store 連線錯誤導致無法拿回特徵,這時若模型內部又有 exception handling 來給予 default value 就不會出現在 Exception Error,原則上不該這樣, 模型 Endpoint 本身應該專注處理 Inference,而 Feature Collect and Transform 應該放在 Inference Endpoint 外
  • Discrepancy Error: 通常這種錯誤開始比較難偵測,舉個例子,如果你原本的依賴的資料表有一個欄位是註冊時間,但有一天,我們最好的朋友 Data Engineer 決定把預設為 +8 時區的時間改成 +0 的時間,但是他沒有通知到你,導致你新拿到的資料和你原本的資料對不起來,這種我稱呼為 Discrepancy,也就是預期和實際不相符,修太大
  • Drift Error: 這種通常是資料的穩定性產生變化,舉例來說原本你公司都是台灣的用戶,但現在公司拓點到法國,那麼用戶行為表的數值分佈,將會產生很大的變化,偵測到這種變化就需要去重新訓練模型或是做分流處理

整個 Monitoring 可以簡單分成三款

  1. **Data Collector Based Monitoring **
  2. Feature Storage Based Monitoring
  3. Health Check Based Monitoring

Data Collector Based Monitoring

這裡的 Data Collector Based 是指將 Inference Endpoint 收到的 Request 以及傳出去的 Response 收集到一個可觀察的日誌,常見的做法是蒐集 Elastic Search 並透過一些 Query, Kibana Dashbaord Metrics 來監控異常。這裡主要要做到的是搭建一套以 Endpoint 本身為對象的 observability stack, Prometheus Grafana

當有了基本的 Observability,就可以進一步得針對異常做 Alarm 系統,把 Endpoint 側錄下的 Request 和 Response 資訊透過 Message Queue 傳給用於分析的 Pipeline 來觀測是否有異常值,我會歸類這一類的目的是從 Event Sequence 上去實作 Anomaly Detection , Anomaly Detection 我認為是一個很大的題目,但我們可以從

  • Response 的 Score 是否長時間為極端值,更精確一點可以拿過去窗口計算出 Stddev 值而新進來的 Event 值做比較
  • 另外也可以做一些 Time-Series 分析如 Logistic Regression 看資料是否超出趨勢太多

總結來說,Data Collector Based Monitoring 有幾個特點

  • 這裡觀測到的異常不會造成整個 Service SLA 下降,大多的服務還是在線上跑,但是跑出來的結果並不正確
  • 這裡會針對可以觀測到的異常,並且是可以解決的
  • 這裡希望可以在短時間內發現異常,是一個 Near Realtime 的計算

在經驗上來說,如果要實踐這樣的觀測,MLOPs 在設計時就必須考慮模型的 Request 和 Response 怎麼去做封裝,舉個例子,如果用戶輸入的特徵是一個數值,通常你可以直接用如標準差這樣的統計方法來偵測異常,但如果用戶輸入的是一串字串,那他是表達一種 Category 還是一個日期就會有很不一樣的處理方式,如果都當字串處理,就很難去做一個可以 Generalize 的 Data Collector Based Monitoring


上一篇
Day 18 Feature Store
下一篇
Day 20 Feature Storage Based Monitoring
系列文
踏上 MLOps 之路:從 Applied Data Scientist 到 MLOps 的轉變與建構30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言